HEX
Server: Apache
System: Linux v38079.2is.nl 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: democfellows (10015)
PHP: 8.1.34
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/creativefellows.nl/subdomains/demo/httpdocs/printgarden/login/script/script copy.js
var vd;
var ckf 	= [];
var ckf_ct  = 0;
document.observe("dom:loaded", function() {	
	var vd 	= new varData();	
});


var field;

function ckEditor(textedit){
	ckf[ckf_ct] = CKEDITOR.replace(textedit,{
		toolbarGroups: [
			{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup','list'] },
		//	{ name: 'links', items: [ 'link','source'] },
			{ name: 'insert' },
			{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] }
		],
		allowedContent:true
	});	
	
 
	//CKEDITOR.config.height = 300;
	CKFinder.setupCKEditor( ckf[ckf_ct], '../admin/ckfinder/','Upload');
//	console.log(ckf_ct);	
	ckf_ct++;
}	

var varData = Class.create({
	initialize: function(){
		this.isOpen = false;
		this.maxCount = [];	
		this.countMax();
		$$(".adres-toevoegen").invoke("observe","click",this.addAdres.bind(this));
		
		$$(".preview-url").invoke("observe","click",this.updateUrl.bind(this));
		$$(".order-form .input").invoke("observe","focus",this.checkValueLength.bind(this));
		$$(".set").invoke("observe","blur",this.updateAmount.bind(this));
		$$(".delete").invoke("observe","click",this.doLinkaction.bind(this));
		
		$$(".update-max").invoke("observe","change",this.checkMaxAmount.bind(this));
		if($("afronden-bestelling")) $("afronden-bestelling").observe("click",this.checkConfirm.bind(this));
		
		$$(".selector a").invoke("observe","click",this.loadTemplate.bind(this));
		
		$$(".colorpicker span").invoke("observe","click",this.selectColor.bind(this));
	/*	$$(".convertCMYK").each(function(el){
			var cmyk_arr 	= el.down().id.split(".");
			var hex 		= this.cmykToRGB(cmyk_arr[0],cmyk_arr[1],cmyk_arr[2],cmyk_arr[3]);
		//	console.log(hex);
			el.setStyle({
				"backgroundColor": hex,
				"border": hex
			});
		}.bind(this));*/
		
		this.autoGrowFields();
		
		// focus on focus file upload
		this.observeUpload();
		
		// autocomplete
		$$(".autocomplete").each(function(element){	
			this.autoComplete(element);
		}.bind(this));
		
		// save product to db
		if($("save-product-before-order")){
			this.fixButtons();
			$("save-product-before-order").observe("click",this.ajaxSave.bind(this));
		}
				
	},
	cmykToRGB: function(c,m,y,k) {

	    function padZero(str) {
	        return "000000".substr(str.length)+str
	    }

	    var cyan 	= (c * 255 * (1-k)) << 16;
	    var magenta = (m * 255 * (1-k)) << 8;
	    var yellow 	= (y * 255 * (1-k)) >> 0;
	
		//console.log(cyan);

	    var black = 255 * (1-k);
	    var white = black | black << 8 | black << 16;

	    var color = white - (cyan | magenta | yellow );

	    return ("#"+padZero(color.toString(16)));


	},
	ajaxSave: function(event){
		Event.stop(event);
		var el = Event.element(event);
		
		if($F("referentie") == ""){
			$("referentie").addClassName("missed");
			this.tooltip = new toolTip("Vul een refentie voor het product in");
			this.tooltip.setPosition(el);
			return;
		}
		
		
		var fv = $("vardata-form").serialize(true);
		new Ajax.Request("pages/handle.saveproducts.php",{
			parameters: fv,
			onComplete: function(t){
				var r = t.responseText.split("|*|");
				if(r[0] == "ok"){
					
					// set saved id
					$("product_saved_id").value = r[1];
					
					this.tooltip = new toolTip("Product opgeslagen");
					this.tooltip.setPosition(el);
					
				
				}
				
			}.bind(this)
		});
	},
	fixButtons: function(){
		this.scrolltimer = null;
		Event.observe(window, 'scroll', function() {
			if(this.scrolltimer != null) return;				
			this.scrolltimer = setTimeout(function(){
				var scroll 	= document.viewport.getScrollOffsets()

				if(scroll["top"] > 120) this.fixedNav(scroll);
				else $("save-product-before-order").writeAttribute("style",false);
				
				if($F("product_page_count") == 1) this.positionPreviews(scroll["top"]);
				
				this.scrolltimer = null;
			}.bind(this),1000);
				
		}.bind(this));
		


	},
	
	positionPreviews: function(scrolltop){
		
		$$(".pdf-page .preview").each(function(prev){
			var offset 		= prev.up().cumulativeOffset();
			var prev_h		= prev.getDimensions();
			var group_h		= prev.up().getHeight();
	//		if(scrolltop > offset.top) return;
			
			//console.log((prev_h.height+50)+" > "+group_h);//+" > "+group_h);
			if((prev_h.height+50) > group_h){
				prev.writeAttribute("style",false);
				return;
			}
			console.log(scrolltop+" < "+(prev_h.height+offset.top));
			if(scrolltop > offset.top && scrolltop < (group_h+offset.top)){
				prev.setStyle({
					paddingTop: (scrolltop-offset.top +75)+"px"
				});
			}else{
				prev.writeAttribute("style",false);
			}
			
		});
	},
	
	fixedNav: function(scroll){
		$("save-product-before-order").setStyle({top: (scroll["top"]-120)+"px"});
	},
	autoComplete: function(element){
		if(!$("global-results")){
			var div		= new Element("div",{'class':"autocomplete","id" : "autocomplete_choices"}).hide();
			
			element.insert({after:div});
		}
		
		new Ajax.Autocompleter(element, "autocomplete_choices", "pages/handle.search-ajax.php", {
			paramName: element.id, 
		  	minChars: 2,
		 	afterUpdateElement: this.getSelectionId
		});
	},
	
	getSelectionId: function(text,li) {
		window.location.href = li.id;
	},
	
	observeUpload: function(){
		$$(".order-form .browsefile").invoke("stopObserving","focus");
		$$(".order-form .browsefile").invoke("observe","click",this.doUpload.bind(this));		
	},
	doUpload: function(event){
		var el = event.element();
		this.isOpen = true;
		el.stopObserving("focus");
		
		field = el;
				
		var finder = new CKFinder();
		finder.basePath = '../';
		finder.selectActionFunction = this.fileField;		
		finder.resourceType			= "Upload";
		finder.popup();
	},
	fileField: function(fileUrl,data,images){

		var imgName 			= images[0].data['fileUrl'];
		field.value		 		= imgName.split("/").last();
		field.next().value 		= imgName;
		 
	},
	loadTemplate: function(event){
		Event.stop(event);
		var el = event.element();

		
		// update actives
		this.toggleActives(el);
		
		var pars = el.id.split("|*|");
		new Ajax.Request("pages/handle.vardata.php",{
			parameters: "template_id="+pars[1]+"&page="+pars[0]+"&edit_id="+$F("product_edit"),
			onComplete: function(t){
				var r = t.responseText;
				el.up(1).next().update(r);
				
				$$(".preview-url").invoke("stopObserving","click");
				$$(".preview-url").invoke("observe","click",this.updateUrl.bind(this));
				
				this.observeUpload();
				
				this.autoGrowFields();
				
				//$("template_click_count").value = parseInt($F("template_click_count"))+1;
				el.up(1).addClassName("selected-page-template");
				
				//this.ajaxText(el.up(1).next().id);
				$$(".colorpicker span").invoke("stopObserving","click");
				$$(".colorpicker span").invoke("observe","click",this.selectColor.bind(this));
				
				
				
			}.bind(this)
		});
	},
	//ajaxText: function(loaded_div_id){
	//	$$("#"+ $(loaded_div_id) +" .texteditor").each(function(textedit){
	//		ckEditor(textedit);		
	//		ckf_ct++;					
	//	});	
	//},
	autoGrowFields: function(){
		$$(".autogrow").invoke("stopObserving","keydown");		
		$$(".autogrow").invoke("observe","keydown",this.resizeTextarea.bind(this));
		//$$(".autogrow").invoke("observe","focus",this.cursorToBottom.bind(this));
		
		$$(".autogrow").each(function(el){
			this.resizeTextarea(null,el);
		}.bind(this));
	},
	cursorToBottom: function(event){
		var el 		= event.element();
		el.value = el.value;
	},
	resizeTextarea: function(event,el){
		if(event != null) var el = event.element();
	    var str 	= el.value;
	    var cols 	= el.cols;
	
	    var linecount = 0;
	    $A(str.split("\n")).each( function(l) {
	      linecount += Math.ceil( l.length / cols );
	    });
	    el.rows = linecount + 2;
	},
	countMax: function(){
		$$(".set").each(function(el){
			var pars 				= el.id.split("|*|");	
			var id 					= pars[0];
			this.maxCount[id]		= el.value;
		}.bind(this))
	},
	checkMaxAmount: function(event){
		
		var el 		= event.element();
		var id 		= el.attributes.rel.value; // uid
		var max 	= this.maxCount[id];

	//	console.log(max);
		var totaal	= 0;
		//this.maxCount[id]["current"] = el.value;
		
		$$("."+id).each(function(el){
			//console.log(el.className);
			totaal += parseInt($F(el));
		}.bind(this));
		
	//	console.log("max="+max+" tot="+totaal);

		if(totaal > max){
			alert("Totaal aantal kan niet groter zijn dan "+max+". Verdeel de aantallen over de verschillende aflveradressen.");
			el.options.selectedIndex = 0;
		}
	},
	addAdres: function(event){

		Event.stop(event);
		var el 		= Event.element(event);
		var fields 	= $("template-adres").innerHTML;
		
		var div = new Element("div",{"class": "afleveradres","id":new Date().getMilliseconds()}).update('<div class="wrapper"><div class="adres-wrapper">'+fields+'</div></div>');
		
		$("default-adres").insert({after:div});
		
		$$("#"+div.id+" .input").each(function(el){
			el.disabled = false;
		});
		
		$$(".delete-afleveradres").invoke("stopObserving","click");
		$$(".delete-afleveradres").invoke("observe","click",this.removeAdres.bind(this));
		
		$$(".update-max").invoke("stopObserving","change");
		$$(".update-max").invoke("observe","change",this.checkMaxAmount.bind(this));
		
		
		
	},
	removeAdres: function(event){
		Event.stop(event);
		var el = event.element();
		el.up(3).remove();
	},
	doLinkaction: function(event){
		Event.stop(event);
		var el 	= Event.element(event);
		var pid = el.up(1).id.replace("li","");
		var cn	= el.className;
		
		switch(cn){
			case "delete":
				var mesg 	= confirm("Weet je zeker dat je dit product wilt verwijderen?\n");
				if (mesg==true) this.deleteProduct(pid);
			break;
		}		
	},
	deleteProduct: function(pid){
		new Ajax.Request('pages/handle.remove_basket.php',{
			parameters: 'pid='+pid,
			onComplete: function (r){
				var count = r.responseText;
				
				// //this.count.update(count)
				new Effect.DropOut($("li"+pid),{
					duration:0.5,
					afterFinish: function(){
						$("li"+pid).remove();
						this.updateBasket()
						
						$$("."+pid).each(function(el){
							//console.log(el.className);
							el.up().remove();
						}.bind(this));
					
					}.bind(this)
				});

			}.bind(this)
		});
	},
	updateAmount: function(event){
		
		var el 		= event.element();
		var pars 	= el.id.split("|*|");	
		
		var id 		= pars[0];	
		var amount 	= parseFloat(pars[1]);
		var price 	= parseFloat(pars[2]);
		var db_id 	= parseFloat(pars[3]);
		var start 	= parseFloat(pars[4]);
		var type	= el.hasClassName("default") ? "default" : "set";
		
		new Ajax.Request("pages/staffel_product.php",{
			parameters: "vardata_id="+db_id+"&amount="+el.value+"&id="+id+"&type="+type,
			onComplete: function(t){
				var data 	= JSON.parse(t.responseText);
				
				// set max count in array
				var checked = el.value.gsub(/[^0-9]/, '');
				if(checked == "") checked = 1;

				this.maxCount[id] = checked;
				el.value = checked;

				// do update
				var total	= (el.value*data.prijs)+start;
				
				// reset count to max
				$$("."+id).each(function(el){
					el.value = 0;
				}.bind(this));
				$(id+"_std").value = checked;
				
				// update totaalprijs
				$("price"+id).update(this.formatPrice(total));
				$("price"+id).attributes.rel.value = total;

				// update itemprijs
				$("itemprice"+id).update(this.formatPrice(parseFloat(data.prijs)));
				$("itemprice"+id).attributes.rel.value = data.prijs;
				
				//update totalen
				this.updateBasket();
				
			}.bind(this)
		});

	},
	checkConfirm: function(event){
		if(this.countProducts() == false){
			alert("Het totaal bij de afleveradressen moet gelijk zijn aan het totaal aantal in de winkelwagen. \nVerdeel de aantal over de verschillende afleveradressen.");
			Event.stop(event);
			return false;
		}

		if($("order-ok").checked == false){
			alert("U heeft nog niet aangeveven dat uw order compleet is.");
			$("order-ok").up().setStyle({color: "red",fontWeight: "bold"});
			Event.stop(event);
			return false;
		}
		
		if(this.validateForm("bestelling-form") == false){
			alert("U heeft niet alle verplichte velden zijn ingevuld.");
			Event.stop(event);
			return false;
		}
	},
	validateForm :function(formid){
		var inputs 	= $(formid).getInputs("text");
		var check 	= true;

		inputs.each(function(i){
			if(i.hasClassName("required") && $F(i) == "" && i.disabled == false){
				i.addClassName("missed");
				check 		= false;
			}else i.removeClassName("missed");

		});
		return check;
	},
	countProducts: function(){
		var totals = true;
		var items = $$("li.item");
		items.each(function(item){
			var id 		= item.id.replace("li","");		
			var max 	= this.maxCount[id];
			var totaal	= 0;
		
			$$("."+id).each(function(el){
				//console.log(el.className);
				totaal += parseInt($F(el));
			}.bind(this));

			if(totaal < max) totals = false;
			//console.log("max="+max+" tot="+totaal);
		}.bind(this));
		
		return totals;
	},
	updateBasket: function(){
		var t 		= 0;
		var admk 	= parseInt($F("adminkosten-klant")); 
		//console.log(admk);
		$$(".item .totaalprijs").each(function(el){
		//	console.log(el.attributes.rel.value);	
			t += parseFloat(el.attributes.rel.value);
		});
		
		$("totaal-ex").update(this.formatPrice(t));
		$("totaal-btw").update(this.formatPrice(0.21*(t+admk)));
		$("totaal-totaal").update(this.formatPrice(1.21*(t + admk)));
		
		$("bestelling-totaal").update(1.21*t + admk);

		
	},
	updateUrl: function(event){
		Event.stop(event);

		var el 		= event.element();
		
		if($F("referentie") == ""){
			$("referentie").addClassName("missed");
			this.tooltip = new toolTip("Vul een refentie voor het product in");
			this.tooltip.setPosition(el);
			return;
		}
		
		var inputs 		= $$("#vardata-form .input");
		
		inputs.each(function(i){
			if(i.hasClassName("texteditor")){
				console.log(i);
				$(i).value = CKEDITOR.instances[i.id].getData();
			}
		}.bind(this));
		
		var fv 		= $("vardata-form").serialize(true);
		
		var preview = $("preview"+el.id);
		preview.down(1).next().show();		

		$("preview-loader"+el.id).appear({duration:0.2});
		
		new Ajax.Request("download",{
			parameters: fv,
			onComplete: function(t){
				var r = this.getResponse(t);	
				if(r[0] == "ok"){
					
					var update = '<a href="view-pdf?file='+r[1]+'&'+this.randomId()+'" target="_blank">Download pdf bestand</a>';
					if(!$("dld-preview-pdf"+el.id)){						
						var dld = new Element("div",{"class":"clear","style": "font-size:16px;","id":"dld-preview-pdf"+el.id}).hide().update(update);
						preview.insert({bottom:dld});
					}else $("dld-preview-pdf"+el.id).hide().update(update);

					// pdf prevriew link
					$("dld-preview-pdf"+el.id).appear({duration:0.5});
					
					// update post data with stamped pdf
					$("product_preview_pdf").value = r[1];


					// create new preview from image
					this.updatePreviewImg(r[1],fv["img_preview_"+el.id],el.id,$F("preview_page_"+el.id));				
					
				}else{
					alert("Er is een fout opgetreden bij het verwerken van de data.");
				}
				
				var gen_pages = $$(".selected-page-template").length;
				if(gen_pages == $F("product_page_count")){	
					
					$("order-product-btn").show();
				}
			}.bind(this)
		});
	},
	updatePreviewImg: function(file_url,img_url,id,pdf_page){
		new Ajax.Request("preview",{
			parameters: "pdf="+file_url+"&img="+img_url+'&p='+(pdf_page-1),
			onComplete: function(t){
				//console.log(id);
				var r = this.getResponse(t);	
				if(r[0] == "ok"){
					var imgSrc = img_url+"?"+this.randomId();
					$("pdf-preview-img"+id).src 			= imgSrc;
					$("pdf-preview-img"+id).next().href 	= imgSrc;
				}
				
				$("preview-loader"+id).fade({duration:0.2});
				
				
			}.bind(this)
		});
	},
	checkValueLength: function(event){
		var el 	= event.element();
		if(el.hasClassName("browsefile") || !el.attributes.rel) return;
		var max = el.attributes.rel.value;
		var msg = false;
		if(max == 0) return;

		el.observe("keyup",function(){
			if(el.value.length > max){
				
				el.value = el.value.substr(0,max); 
				if(msg == true) return;

				if(!$("max-length-msg")){
					var div = ($("max-length-msg")) ? $("max-length-msg") : new Element("div",{"id":"max-length-msg"}).update("<p class='error'>Uw tekst mag niet langer zijn dan "+max+" tekens</p>");
					el.insert({after:div});
					msg = true;
					
				}else{
					var div = $("max-length-msg");
					div.show();
				}
				
				setTimeout(function(){
					div.hide();
					msg = false;
				}.bind(this),5000)
			}
		});

	},
	getResponse: function(t){
		var r = t.responseText;
		var p = r.split("|*|");
		if(p[0]== "ok") return p
		else return false;
	},
	randomId: function(){
		var length 	= 20;
		var chars 	= '0123456789abcdefghiklmnopqrstuvwxyz'.split('');

	    if (! length) {
	        length = Math.floor(Math.random() * chars.length);
	    }

	    var str = '';
	    for (var i = 0; i < length; i++) {
	        str += chars[Math.floor(Math.random() * chars.length)];
	    }
	    return str;
	},
	formatPrice: function(str){
		return "&euro; "+str.toFixed(2).replace(".",","); 
	},
	toggleActives: function(el){
		var parent = el.up(1).id;

		$$("#"+parent+" a").invoke("removeClassName","active");
		el.addClassName("active");		
	},
	selectColor: function(event){
		Event.stop(event);
		var el = Event.element(event);
		
		this.toggleActives(el.up());
		
		el.addClassName("active");
		el.up(2).next().value = el.id;
	}
});

var toolTip = Class.create({
	initialize: function(tip) {
		this.delay	= 3000;
		
		if($('toolTip')) return;
		$$("body").first().insert( new Element('div',{ id: 'toolTip' }).hide());
		this.tip  	= tip;
		this.tipDiv = $('toolTip'); 
		//this.tipDiv.hide();
		this.tipDiv.update(this.tip);
		this.showTip();
	},
	showTip: function(){
		new Effect.Appear(this.tipDiv,{duration:0.3,delay:0});
		
		//setTimeout(function(){
		//	new Effect.Highlight(this.tipDiv,{ startcolor: '#3399cc',endcolor: '#ffffff',delay:0.5});
		//}.bind(this),500);
		
		//new Effect.Appear(this.tipDiv,{duration:0.3, delay:0.5});
		this.timer = setTimeout(function(){
			this.fadeTip();
		}.bind(this), this.delay );
	},
	onPageTip: function(tip_element){
		this.tipDiv = tip_element;
		this.tipDiv.setStyle({top:"40%"})
		new Effect.Appear(this.tipDiv,{duration:0.3,delay:0.5});
			this.timer = setTimeout(function(){
				this.fadeTip();
			}.bind(this), this.delay );
	},
	fadeTip: function(){
		new Effect.Fade(this.tipDiv,{duration:0.3});
		this.timer = setTimeout( function(){
			this.tipDiv.remove();
		}.bind(this), 300);
	},
	cancelTip: function(){
    	if(!this.timer) return;
    	clearTimeout(this.timer);
    	this.tipDiv.remove();
  	},
	setPosition: function(element){
		var pos = element.cumulativeOffset();
		var x = pos[1];
		var y = pos[0];
		this.tipDiv.setStyle({
			position: 'absolute',
			top: (element.getHeight()+x+16)+'px',
			left: (y+(element.getWidth()/2)) + 'px',
			marginLeft: -(element.getWidth()/2)+"px",
			width: 'auto'
		});	
	}
});